package ar.com.quickMart.database.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import ar.com.quickMart.database.ProductDao;

public class ProductDaoMySql extends BaseDaoMySql implements ProductDao{

	/**
	 * addProduct
	 * 
	 * Agrega un producto a la BDD.
	 * 
	 * @param 		barcode	Codigo de barras del producto a agregar
	 * @param 		name	Nombre del producto a agregar
	 * @return		true	si agrego correctamente el producto a la BDD
	 * 				false	en caso contrario 
	 */	
	public boolean addProduct(long barcode, String name) {
		
		// Creo variable para la conexion
		Connection connection;
		
		// Abro la conexion
		connection = connect();
		
		// Creo el query de insercion
		String query = "INSERT INTO Producto (CodBarra, Nombre) VALUES (\"" + barcode + "\", \"" + name + "\")";

		try {
			
			// Creo la sentencia y ejecuto el query
			Statement statement = connection.createStatement();
			statement.executeUpdate(query);
		}
		catch (Exception ex) {
			ex.printStackTrace();
			
			// Desconecto de la BDD
			disconnect(connection);
			
			// Error al agregar producto, devuelvo false
			return false;
		}
		
		// Desconecto de la BDD
		disconnect(connection);
		
		// Producto agregado exitosamente, devuelvo true
		return true;		
	}
	
	/**
	 * removeProduct
	 * 
	 * Borra un producto a la BDD a partir de su codigo de barras.
	 * 
	 * @param 		barcode	Codigo de barras del producto a eliminar
	 * @return		true	si elimino correctamente el producto de la BDD
	 * 				false	en caso contrario 
	 */	
	public boolean removeProduct(long barcode) {
		
		// Creo variable para la conexion
		Connection connection;
		
		// Abro la conexion
		connection = connect();
		
		// Creo el query
		String query = "DELETE FROM Producto WHERE CodBarra = \"" + barcode + "\"";

		try {
			
			// Creo la sentencia y ejecuto el query
			Statement statement = connection.createStatement();
			statement.executeUpdate(query);
		}
		catch (Exception ex) {
			ex.printStackTrace();
			
			// Desconecto de la BDD
			disconnect(connection);
			
			// Error al eliminar producto, devuelvo false
			return false;
		}
		
		// Desconecto de la BDD
		disconnect(connection);
		
		// Producto eliminado, devuelvo true
		return true;		
	}
	
	public String getProductName(long barcode){
		Connection connection;
		
		// Abro la conexion
		connection = connect();
		
		String name = null;
		
		// Creo el query
		String query = "SELECT Nombre FROM Producto WHERE CodBarra = ?;";

		try {
			
			// Creo la sentencia y ejecuto el query
			PreparedStatement statement = connection.prepareStatement(query);
			statement.setLong(1, barcode);
			
			ResultSet result;
			
			result = statement.executeQuery();
			result = statement.getResultSet();
			
			if(result.next()) {
				name = result.getString("Nombre");
			}
		}
		catch (Exception ex) {
			ex.printStackTrace();
			
			// Desconecto de la BDD
			disconnect(connection);
			
			// Error al eliminar producto, devuelvo false
			return null;
		}
		
		// Desconecto de la BDD
		disconnect(connection);
		
		// Producto eliminado, devuelvo true
		return name;
	}
}
